home *** CD-ROM | disk | FTP | other *** search
/ Mac Magazin/MacEasy 30 / Mac Magazin and MacEasy Magazine CD - Issue 30.iso / utilities / Mac OS X / Load_Monitor / src / Preferences.m < prev    next >
Encoding:
Text File  |  2002-01-12  |  7.5 KB  |  214 lines

  1. /*
  2.  *    Load Monitor
  3.  *
  4.  *    Copyright © 2001 Alexandre Vial, some parts from Bernhard Baehr
  5.  *
  6.  *    Preferences.m - Preferences Controller Class
  7.  *
  8.  *    This program is free software; you can redistribute it and/or modify
  9.  *    it under the terms of the GNU General Public License as published by
  10.  *    the Free Software Foundation; either version 2 of the License, or
  11.  *    (at your option) any later version.
  12.  *
  13.  *    This program is distributed in the hope that it will be useful,
  14.  *    but WITHOUT ANY WARRANTY; without even the implied warranty of
  15.  *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16.  *    GNU General Public License for more details.
  17.  *
  18.  *    You should have received a copy of the GNU General Public License
  19.  *    along with this program; if not, write to the Free Software
  20.  *    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  21.  */
  22.  
  23.  
  24. #import "Preferences.h"
  25.  
  26.  
  27. @implementation Preferences
  28.  
  29.  
  30. + (NSMutableDictionary *)defaultPreferences
  31. {
  32.     return ([[NSMutableDictionary alloc] initWithObjectsAndKeys:
  33.         [NSColor yellowColor], WIRED_COLOR_KEY,
  34. //        [NSColor magentaColor], ACTIVE_COLOR_KEY,
  35. //        [NSColor cyanColor], INACTIVE_COLOR_KEY,
  36.         [NSColor blueColor], FREE_COLOR_KEY,
  37.         [NSColor whiteColor], PAGEIN_COLOR_KEY,
  38.         [NSColor blackColor], PAGEOUT_COLOR_KEY,
  39.         [NSNumber numberWithFloat:0.8], TRANSPARENCY_KEY,
  40.         [NSNumber numberWithInt:20], UPDATE_FREQUENCY_KEY,    /* unit is 1/10 second */
  41.         [NSNumber numberWithInt:1], PAGING_SCALE_MAX_KEY,
  42.         [NSNumber numberWithBool:YES], PAGEIN_ATOP_PAGEOUT_KEY,
  43.         [NSNumber numberWithBool:YES], SHOW_PAGING_RATE_KEY,
  44.         [NSNumber numberWithBool:NO], SHOW_GRAPH_WINDOW_KEY,
  45.         [NSNumber numberWithBool:NO], GRAPH_WINDOW_ON_TOP_KEY,
  46.         [NSNumber numberWithInt:128], GRAPH_WINDOW_SIZE_KEY,
  47.         nil]);
  48. }
  49.  
  50.  
  51. - (id)init
  52. {
  53. #define SCANCOLOR(key)    \
  54.     if ((obj = [defaults objectForKey:key])) { \
  55.         sscanf ([obj cString], "%f %f %f", &r, &g, &b); \
  56.         obj = [NSColor colorWithCalibratedRed:r green:g blue:b alpha:1.0]; \
  57.         [currentSettings setObject:obj forKey:key]; \
  58.     }
  59. #define GETNUMBER(key)    \
  60.     if ((obj = [defaults objectForKey:key])) \
  61.         [currentSettings setObject:obj forKey:key];
  62.  
  63.     id    obj;
  64.     float    r, g, b;
  65.  
  66.     NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
  67.     
  68.     self = [super init];
  69.         currentSettings = [Preferences defaultPreferences];
  70.     SCANCOLOR (WIRED_COLOR_KEY);
  71. //    SCANCOLOR (ACTIVE_COLOR_KEY);
  72. //    SCANCOLOR (INACTIVE_COLOR_KEY);
  73.     SCANCOLOR (FREE_COLOR_KEY);
  74.     SCANCOLOR (PAGEIN_COLOR_KEY);
  75.     SCANCOLOR (PAGEOUT_COLOR_KEY);
  76.     GETNUMBER (TRANSPARENCY_KEY);
  77.     GETNUMBER (UPDATE_FREQUENCY_KEY);
  78.     GETNUMBER (PAGING_SCALE_MAX_KEY);
  79.     GETNUMBER (PAGEIN_ATOP_PAGEOUT_KEY);
  80.     GETNUMBER (SHOW_PAGING_RATE_KEY);
  81.     GETNUMBER (SHOW_GRAPH_WINDOW_KEY);
  82.     GETNUMBER (GRAPH_WINDOW_ON_TOP_KEY);
  83.     GETNUMBER (GRAPH_WINDOW_SIZE_KEY);
  84.     return (self);
  85. }
  86.  
  87.  
  88. - (void)showUpdateFrequency:(int)freq
  89. {
  90.     [updateFrequency setStringValue:[NSString stringWithFormat:@"%.1f sec.", freq / 10.0]];
  91. }
  92.  
  93.  
  94. - (void)adjustGraphWindowControls
  95. {    
  96.     id    obj;
  97.     
  98.     BOOL enabled = [[currentSettings objectForKey:SHOW_GRAPH_WINDOW_KEY] boolValue];
  99.     NSColor *color = enabled ? [NSColor controlTextColor] : [NSColor controlHighlightColor];
  100.     NSEnumerator *enumerator = [[graphWindowOptionsView subviews] objectEnumerator];
  101.     
  102.     while ((obj = [enumerator nextObject])) {
  103.         if ([obj isMemberOfClass:[NSTextField class]])
  104.             [obj setTextColor:color];
  105.         else
  106.             [obj setEnabled:enabled];
  107.     }
  108. }
  109.  
  110.  
  111. - (IBAction)showPreferences:(id)sender
  112. {
  113.     double    freq;
  114.     
  115.     if (! panel) {
  116.         if ([NSBundle loadNibNamed:@"Preferences" owner:self])
  117.             [panel center];
  118.         else {
  119.             NSLog (@"Failed to load Preferences.nib");
  120.             return;
  121.         }
  122.     }
  123.     [wiredColor setColor:[currentSettings objectForKey:WIRED_COLOR_KEY]];
  124. //    [activeColor setColor:[currentSettings objectForKey:ACTIVE_COLOR_KEY]];
  125. //    [inactiveColor setColor:[currentSettings objectForKey:INACTIVE_COLOR_KEY]];
  126.     [freeColor setColor:[currentSettings objectForKey:FREE_COLOR_KEY]];
  127.     [pageinColor setColor:[currentSettings objectForKey:PAGEIN_COLOR_KEY]];
  128.     [pageoutColor setColor:[currentSettings objectForKey:PAGEOUT_COLOR_KEY]];
  129.     [transparency setFloatValue:[[currentSettings objectForKey:TRANSPARENCY_KEY] floatValue]];
  130.     freq = [[currentSettings objectForKey:UPDATE_FREQUENCY_KEY] floatValue];
  131.     [self showUpdateFrequency:(int)freq];
  132.     [updateFrequencySlider setFloatValue:1000.0 * log(freq)];
  133.     [pagingScale selectItemAtIndex:[pagingScale
  134.         indexOfItemWithTag:[[currentSettings objectForKey:PAGING_SCALE_MAX_KEY] intValue]]];
  135.     [pageinAtopPageout selectCellWithTag:[[currentSettings objectForKey:PAGEIN_ATOP_PAGEOUT_KEY] intValue]];
  136.     [showPagingRate setState:[[currentSettings objectForKey:SHOW_PAGING_RATE_KEY] boolValue]];
  137.     [showGraphWindow setState:[[currentSettings objectForKey:SHOW_GRAPH_WINDOW_KEY] boolValue]];
  138.     [graphWindowOnTop setState:[[currentSettings objectForKey:GRAPH_WINDOW_ON_TOP_KEY] boolValue]];
  139.     [graphWindowSize setFloatValue:[[currentSettings objectForKey:GRAPH_WINDOW_SIZE_KEY] floatValue]];
  140.     [self adjustGraphWindowControls];
  141.     [panel makeKeyAndOrderFront:nil];
  142. }
  143.  
  144.  
  145. - (IBAction)revertToDefaults:(id)sender
  146. {
  147.     [currentSettings release];
  148.     currentSettings = [Preferences defaultPreferences];
  149.     [self showPreferences:sender];
  150.     [[NSNotificationCenter defaultCenter] postNotificationName:PREFERENCES_CHANGED object:nil];
  151. }
  152.  
  153.  
  154. - (void)savePreferences
  155. {
  156.     id        obj;
  157.     float        r, g, b, a;
  158.     NSString    *key;
  159.     
  160.     NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
  161.     NSEnumerator *enumerator = [currentSettings keyEnumerator];
  162.  
  163.     while ((key = [enumerator nextObject])) {
  164.         obj = [currentSettings objectForKey:key];
  165.         if ([obj isKindOfClass:[NSColor class]]) {
  166.             [[obj colorUsingColorSpaceName:@"NSCalibratedRGBColorSpace"]
  167.                 getRed:&r green:&g blue:&b alpha:&a];
  168.             [obj release];
  169.             obj = [NSString stringWithFormat:@"%f %f %f", r, g, b];
  170.         }
  171.         [defaults setObject:obj forKey:key];
  172.     }
  173. }
  174.  
  175.  
  176. - (id)objectForKey:(id)key
  177. {
  178.     return ([currentSettings objectForKey:key]);
  179. }
  180.  
  181.  
  182. - (IBAction)preferencesChanged:(id)sender
  183. {
  184.     int    freq;
  185.     
  186.     [currentSettings setObject:[wiredColor color] forKey:WIRED_COLOR_KEY];
  187. //    [currentSettings setObject:[activeColor color] forKey:ACTIVE_COLOR_KEY];
  188. //    [currentSettings setObject:[inactiveColor color] forKey:INACTIVE_COLOR_KEY];
  189.     [currentSettings setObject:[freeColor color] forKey:FREE_COLOR_KEY];
  190.     [currentSettings setObject:[pageinColor color] forKey:PAGEIN_COLOR_KEY];
  191.     [currentSettings setObject:[pageoutColor color] forKey:PAGEOUT_COLOR_KEY];
  192.     [currentSettings setObject:[NSNumber numberWithFloat:[transparency floatValue]] forKey:TRANSPARENCY_KEY];
  193.     freq = exp([updateFrequencySlider doubleValue] / 1000.0);    /* 1..600 == 0.1 sec. to 1 min. */
  194.     [self showUpdateFrequency:freq];
  195.     [currentSettings setObject:[NSNumber numberWithInt:freq] forKey:UPDATE_FREQUENCY_KEY];
  196.     [currentSettings setObject:[NSNumber numberWithInt:[[pagingScale selectedItem] tag]] forKey:PAGING_SCALE_MAX_KEY];
  197.     [currentSettings setObject:[NSNumber numberWithInt:[[pageinAtopPageout selectedCell] tag]] forKey:PAGEIN_ATOP_PAGEOUT_KEY];
  198.     [currentSettings setObject:[NSNumber numberWithInt:[showPagingRate state]] forKey:SHOW_PAGING_RATE_KEY];
  199.     [currentSettings setObject:[NSNumber numberWithInt:[showGraphWindow state]] forKey:SHOW_GRAPH_WINDOW_KEY];
  200.     [currentSettings setObject:[NSNumber numberWithInt:[graphWindowOnTop state]] forKey:GRAPH_WINDOW_ON_TOP_KEY];
  201.     [currentSettings setObject:[NSNumber numberWithInt:[graphWindowSize intValue]] forKey:GRAPH_WINDOW_SIZE_KEY];
  202.     [self adjustGraphWindowControls];
  203.     [[NSNotificationCenter defaultCenter] postNotificationName:PREFERENCES_CHANGED object:nil];
  204. }
  205.  
  206.  
  207. - (int)windowNumber
  208. {
  209.     return (panel ? [panel windowNumber] : 0);
  210. }
  211.  
  212.  
  213. @end
  214.